<?php

App::uses('AppController', 'Controller');

class ProductsController extends AppController {

	var $name = 'Products';
	var $uses = array('Product', 'Image');



	/**
	 * Danh Sach san pham
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function index() {
		App::uses('Category', 'Model');
		$Category = new Category();

		// Lay san pham noi bac
		$newprocuts = $this->Product->getAll(array('new' => 1), 0, 8);
		if(!empty($newprocuts))
		foreach($newprocuts as $k => $v){
			$info = $Category->read(array('als'), $v[$this->als]['category_id']);
			$newprocuts[$k][$this->als]['category_als'] = $info['Category']['als'];
		}

		// Lay san pham noi bac
		$promprocuts = $this->Product->getAll(array('prominent' => 1), 0, 8);
		if(!empty($promprocuts))
		foreach($promprocuts as $k => $v){
			$info = $Category->read(array('als'), $v[$this->als]['category_id']);
			$promprocuts[$k][$this->als]['category_als'] = $info['Category']['als'];
		}

		// Lay san pham noi bac
		$runprocuts = $this->Product->getAll(array('run' => 1), 0, 8);
		if(!empty($runprocuts))
		foreach($runprocuts as $k => $v){
			$info = $Category->read(array('als'), $v[$this->als]['category_id']);
			$runprocuts[$k][$this->als]['category_als'] = $info['Category']['als'];
		}

		$this->set('new_procuts', $newprocuts);
		$this->set('prom_procuts', $promprocuts);
		$this->set('runprocuts', $runprocuts);

		$this->set('als', $this->als);

		// Danh muc
        $this->set('categories', $this->Common->_getCategories($Category));
	}

	/**
	 * List
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function lists($category_id, $page = 1){
		$als = &$this->als;
		App::uses('Category', 'Model');
		$Category = new Category();

		$paginate['page'] = $page;
		$paginate['limit'] = 12;
		$this->paginate = $paginate;

		$cond = array('status' => 4, 'category_id' => (int)$category_id);
        $products = $this->paginate($cond);

		// Set url cho paging
		$params = $this->params;
		$url = array(  'slug' => $params['slug'], 'fixslug' => $params['fixslug'], 'id' => $params['id'], 'ext' => $params['ext'] );
		$this->set('url', $url);

		$this->set('category', $Category->read(array('name', 'als'), (int)$category_id));
        $this->set('products', $products);
        $this->set('als', $als);

        // Danh muc
        $this->set('categories', $this->Common->_getCategories($Category));
	}

	/**
	 * Xem chi tiet
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function detail($id)
	{
		App::uses('Category', 'Model');
		$Category = new Category();
		App::uses('ProductAtribute', 'Model');
		$PA = new ProductAtribute();

		// Lấy thông tin sản phẩm

		$product = $this->Product->read(null, (int)$id);

		// Lấy danh sách sản phẩm liên quan
		$cond = array('category_id' => $product['Product']['category_id'], 'id <>' => (int)$id);
		$products = $this->Product->getAll($cond, (int)$id);

		// Lấy thông tin danh mục
		$category = $Category->read(null, $product['Product']['category_id']);
		if($category['Category']['parent_id'] != 0) {
			$category_p = $Category->read(null, $category['Category']['parent_id']);
			$this->set('category_p', $category_p);
		}

		$this->set('product', $product);
		$this->set('products', $products);
		$this->set('images', $this->Image->getAll('Product-' . $id));
		$this->set('category', $category);
		$this->set('attrs', $PA->getAll($id));

		$this->set('als', $this->als);
		$this->set('slider', false);

        // Danh muc
        $this->set('categories', $this->Common->_getCategories($Category));
	}



	/**
	 * Danh sach san pham
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_index( $category_id = null) {
		App::uses('Category', 'Model');
		$Category = new Category();
		App::uses('Codetbl', 'Model');
		$Codetbl = new Codetbl();

		$paginate = $this->paginate;
        $als = &$this->als;

        // get condition from post data
        if (!empty($this->request->data)) {
            $this->_remove_empty_condition();

            // truong hop tim kiem
            if($this->request->data[$als]['action'] == 'search'){
                unset($this->request->data[$als]['action']);

                // reset post data
                $this->condPost = array();

                // create field like
                $like_fields = array($als . '.name', $als . '.als');

                // get condition after filter, get cond form $this->condPost
                $this->postConditions($this->request->data, '', $like_fields, $als);

				if(count($this->condPost) > 1 ) {
	                $this->Session->write($this->name . '_search', $this->condPost);
	                $this->Session->write($this->name . '_data', $this->request->data);
				} else {
					 $this->Session->delete($this->name . '_search');
					 $this->Session->delete($this->name . '_data');
				}

            } elseif ($this->request->data[$als]['action'] == 'update' ){

            	if(!empty($this->request->data[$als]['status'])) {

        			$check = false;
					if(!empty($this->request->data['del'])) {
	                	foreach($this->request->data['del'] as $id => $v){
		                    if($v){
		                    	$check = true;
		                    	// Trường hợp xóa
        						if( $this->request->data[$als]['status'] == 9) {
		                        	$this->Common->_delProductByListId(array((int)$id), $this->Product, $this->Image);
        						} else {
        							$update = array('id' => (int)$id, 'status' => (int)$this->request->data[$als]['status']);
				                    $this->Product->save($update, false);
        						}
		                    }
		                }
	                }

	                unset($this->request->data['del']);

	                if($check) {
						$this->Session->setFlash(__('Cập nhật trạng thái thành công'), 'success');
	                } else {
						$this->Session->setFlash(__('Bạn chưa chọn mẩu tin.'), 'error');
	                }
            	} else {
            		$this->Session->setFlash(__('Bạn chưa chọn hành động.'), 'error');
            	}
            }
        }

        // Get method
        if ($this->Session->check($this->name . '_search')) {

            $this->condPost = $this->Session->read($this->name . '_search');
            $this->request->data = $this->Session->read($this->name . '_data');
        } else {
			$this->condPost[$als . '.category_id'] = $category_id;
			$this->request->data = null;
        }

		// Lấy danh mục cha
		$parentcates = $Category->getList();

		if(empty($this->condPost[$als . '.category_id'])) {
			$parent_id = array_keys($parentcates);
			$this->condPost[$als . '.category_id'] = $parent_id = $parent_id[0] ;
		} else {
			$category = $Category->read(array('name', 'parent_id'), $this->condPost[$als . '.category_id']);
			$parent_id = $category['Category']['parent_id'] != 0 ? $category['Category']['parent_id'] : $category_id;
		}

		// Lay danh muc con
		$categories = $Category->getList($parent_id);

		$paginate['order'] = array('sort' => 'asc');
		$paginate['limit'] = 25;
		$this->paginate = $paginate;

		if(empty($this->condPost[$als . '.status'])) {
			$this->condPost[$als . '.status'] = array(4,5);
		} else {
			$this->condPost[$als . '.status'] = (int)$this->condPost[$als . '.status'];
		}

        $items = $this->paginate($this->condPost);

        $this->_convertData($items);

		$this->set('parent_id', $parent_id);
		$this->set('category_id', $category_id);
		$this->set('categories', $categories);
		$this->set('parent_categories', $parentcates);
		$this->set('items', $items);
		$this->set('status', $Codetbl->getList('COM', 'STS'));

		// thong tin hien thi cho trang
		$this->set('main_page_title', __('Sản phẩm'));
        $this->set('main_page_description', __('Quản lý thông tin các sản phẩm'));

        $breadcrumb = array(
			array('name' => 'Sản Phẩm', 'url' => ''),
		);
		$this->set('breadcrumb', $breadcrumb);
	}

	/**
	 * Add
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_add( $category_id, $id = null)
	{
		App::uses('ProductAtribute', 'Model');
		$PA = new ProductAtribute();
		if(!empty($this->request->data))
		{
			$data = &$this->request->data[$this->als];

			$this->Product->set($data);
			$errors = $this->Product->invalidFields();

			// Kiem tra error chi tiet
			$is_error = false;
			$attributes = &$this->request->data['ProductAtribute'];
			if(!empty($attributes)) {
				$count = count($attributes);
				$attributes = array_values($attributes);
				foreach($attributes as $k => $v) {
					if(empty($v['name']) && empty($v['value'])) continue;

					$PA->set($v);
					$errs = $PA->invalidFields();
					if(!empty($errs)) {
						$is_error = true;
						$attributes[$k]['errors'] = $errs;

						if($count == 1 && !empty($errs['name']) && !empty($errs['value'])) {
							$is_error = false;
						}
					}
				}
			}

			//Save
			if(empty($errors) && !$is_error) {

				// kiem tra edit
				if( empty($data['id']) ) {
					unset($data['id']);
					$data['status'] = 4;
				} else {
					$data['id'] = (int)$data['id'];
				}

				// upload thumb
				if(!empty($data['thumb']['name'])) {
					$data['thumb'] = $this->_upload($data['thumb']);
				} else {
					if(!empty($data['thumb_old'])) {
						$data['thumb'] = $data['thumb_old'];
					} else {
						$data['thumb'] = null;
					}
					unset($data['thumb_old']);
				}

				if($this->Product->save($data, false)) {

					// Delete attr
					$PA->deleteAll(array('product_id' => $this->Product->id));

					// Luu thuoc tinh
					if(!empty($attributes)) {
						foreach($attributes as $k => $v) {
							$v['product_id'] = $this->Product->id;
							$PA->create();
							$PA->save($v);
						}
					}

					// Xoa hinh anh cu
					if(!empty($data['image_del'])) {
						$this->Common->_delImageByListId( $data['image_del'], $this->Image);
					}

					// Luu hinh anh
					if(!empty($data['images'])) {
						$image = array( 'target_id' => 'Product-' . $this->Product->id );
						foreach($data['images'] as $img) {
							if(!empty($img['name'])) {
								$image['image'] = $this->_upload($img);

								if(!empty($image['image'])) {
									$this->Image->create();
									$this->Image->save($image);
								}
							}
						}
					}

					$this->Session->setFlash('Lưu sản phẩm thành công.', 'success');
					if(!empty($data['id'])) {
						$this->redirect(array('action' => 'admin_index', $data['category_id']));
					}
					else {
						$data = array('category_id' => $data['category_id']);
					}
				} else {
					$this->Session->setFlash('Lưu sản phẩm thất bại. Vui lòng xem lại thông tin bên dưới', 'error');
				}
			} else {
				$this->Session->setFlash('Lưu sản phẩm thất bại.', 'error');
			}
		}

		// Truong hop show edit
		if( !empty( $id )) {
			$info = $this->Product->read(null, (int)$id);
			if(!empty($info) && empty($this->request->data)) {
				$this->request->data = $info;
			}

			$this->set('images', $this->Image->getAll('Product-' . $id));

			// Get Attr
			$attrs = $PA->getAll($id);
			if(!empty($attrs))
			foreach($attrs as $k => $v) {
				$attrs[$k] = $v['ProductAtribute'];
			}
			$this->request->data['ProductAtribute'] = $attrs;
		}

		App::uses('Category', 'Model');
		$Category = new Category();

		$this->set('categories', $Category->getAllList());
		$this->set('category_id', $category_id);

		// thong tin hien thi cho trang
		$this->set('main_page_title', __('Sản phẩm'));
        $this->set('main_page_description', __('Quản lý thông tin các sản phẩm'));

        $breadcrumb = array(
			array('name' => 'Sản Phẩm', 'url' => 'products'),
			array('name' => 'Chi tiết sản phẩm'),
		);
		$this->set('breadcrumb', $breadcrumb);
	}

	/**
	 *  Them hinh anh
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_addImage($target_id = null){
		$als = &$this->als;
		if(!empty($this->request->data))
		{
			$data = &$this->request->data[$als];
			// Luu hinh anh
			if(!empty($data['images']) && !empty($data['target_id'])) {
				$image = array( 'target_id' => 'Product-' . $data['target_id'] );
				foreach($data['images'] as $img) {
					if(!empty($img['name'])) {
						$image['image'] = $this->_upload($img);

						if(!empty($image['image'])) {
							$this->Image->create();
							$this->Image->save($image);
						}
					}
				}
			} else {
				$this->Session->setFlash('Lưu hình ảnh thất bại.', 'error');
				$this->redirect(array('action' => 'admin_index'));
			}

			$this->Session->setFlash('Lưu hình ảnh thành công.', 'success');
			$this->redirect(array('action' => 'admin_info', $data['target_id']) );
		} elseif(empty($target_id)) {
			$this->Session->setFlash('Dữ liệu không hợp lệ.', 'error');
			$this->redirect(array('action' => 'admin_index'));
		}

		$product = $this->Product->read(array('category_id'), (int)$target_id);

		$this->set('target_id', $target_id);
		$this->set('category_id', $product[$als]['category_id']);

		// thong tin hien thi cho trang
		$this->set('main_page_title', __('Hình Ảnh'));
        $this->set('main_page_description', __('Quản lý danh sách hình ảnh'));

        $breadcrumb = array(
			array('name' => 'Hình Ảnh', 'url' => 'images'),
			array('name' => 'Thêm')
		);
		$this->set('breadcrumb', $breadcrumb);

		$this->set('breadcrumb', $breadcrumb);
	}

	/**
	 * Remove img
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_deleteimg() {

		if(!empty($this->request->data['id'])) {
			$this->Common->_delImageByListId(array($this->request->data['id']));
			$this->_responseJson(array('code' => 'success', 'msg' => 'Xóa hình ảnh thành công.'));
		}
		$this->_responseJson(array('code' => 'danger', 'msg' => 'Xóa hình ảnh thất bại.'));
	}

	/**
	 * delete san pham
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_delete($id = null){
		if(!empty($id)) {
			$id = (int)$id;
			$info = $this->Product->getInfoById($id, array('category_id'));
			if($this->Product->delete($id)) {
				// Xoa images
				$this->Common->_delImageByTargetId('Product-' . $id, $this->Image);

				$this->Session->setFlash('Xóa sản phẩm thành công.', 'success');
			} else {
				$this->Session->setFlash('Xóa sản phẩm thất bại. Vui lòng thử lại sao', 'error');
			}
		} else {
			$this->Session->setFlash('Không tìm thấy sản phẩm. Vui lòng thử lại sao', 'error');
		}
		$this->redirect(array('action' => 'index', $info['Product']['category_id']));
	}

	/**
	 * Xem chi tiết sản phẩm
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function admin_info($id = null) {
		if(!empty($id)) {
			App::uses('Category', 'Model');
			$Category = new Category();
			App::uses('Codetbl', 'Model');
			$Codetbl = new Codetbl();
			$this->set('status', $Codetbl->getList('COM', 'STS'));

			$product = $this->Product->getInfoById($id );
			$this->set('info', $product);
			$this->set('category', $Category->read(array('name', 'id'), $product['Product']['category_id']));
			$this->set('images', $this->Image->getAll('Product-' . $id));
		} else {
			$this->Session->setFlash('Không tìm thấy sản phẩm. Vui lòng thử lại sao', 'error');
			$this->redirect(array('action' => 'index'));
		}

		// thong tin hien thi cho trang
		$this->set('main_page_title', __('Sản phẩm'));
        $this->set('main_page_description', __('Quản lý thông tin các sản phẩm'));

        $breadcrumb = array(
			array('name' => 'Sản Phẩm', 'url' => 'products'),
			array('name' => 'Chi tiết sản phẩm'),
		);
		$this->set('breadcrumb', $breadcrumb);
	}

	/**
	 * Convert product
	 *
	 * @param type  meta
	 * @return type  meta
	 * @access public
	 */
	function _convertData(&$products, $truncate = 150) {
        if(!empty($products)) {
        	$view = new View( $this );
        	$Text = $view->loadHelper( 'Text' );

			foreach($products as $k => $v) {
				$v['Product']['desc'] = $Text->truncate($v['Product']['desc'], $truncate, array('ellipsis' => '...', 'exact' => false, 'html' => true));
				$products[$k] = $v;
			}
        }
	}

}
